package com.uncp.comisiondeadmision.dao;


import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import com.uncp.comisiondeadmision.util.entity.ESolicitud;

public class DSolicitud implements IDSolicitud {

	
	private EntityManagerFactory emf ;
	private EntityManager em;
	
	
	public void setEmf(EntityManagerFactory emf) {
		this.emf = emf;
	}
	


	public void insertarSolicitud(ESolicitud entidad) throws Exception {
		
		System.out.println("insertarSolicitud");

		em = emf.createEntityManager();
		try {
			em.getTransaction().begin();

			em.persist(entidad);

		} catch (Exception e) {
			em.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			em.getTransaction().commit();
			em.close();
		}
		
	}


	public ESolicitud listarSoliciXPostu(Integer codigo) throws Exception {

		 em = emf.createEntityManager();
			
		 ESolicitud ESolicitud = null;
		 String estado = "aprobado";
		 
		try {

		   Query query = em.createQuery("select s from ESolicitud s " +
		   		" where s.postulante.int_cod_postu=:codigo and s.str_estado not in(:estado)");
		   query.setParameter("codigo", codigo);
           query.setParameter("estado", estado);
		  
		   ESolicitud =  (ESolicitud) query.getSingleResult();
		   
		   System.out.println(ESolicitud.getInt_nrosolicitud());
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}finally{
	      em.close();
		}

		return ESolicitud;
	}


	public void actualizarSolicitud(ESolicitud entidad) throws Exception {
		
            em = emf.createEntityManager();
		
		try {
			em.getTransaction().begin();
			
			em.merge(entidad);
				
		} catch (Exception e) {
			em.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			em.getTransaction().commit();
			em.close();
		}

	}


	public ESolicitud buscarSoliciXPK(Integer codigo) throws Exception {
		
		em = emf.createEntityManager();
		ESolicitud solicitud = null;
		try {
		solicitud = em.find(ESolicitud.class, codigo);
		} catch (Exception e) {
		e.printStackTrace();
		}finally{
			em.close();
		}	
		return solicitud;
	}


	@SuppressWarnings("unchecked")
	public List<ESolicitud> listarSoliAproXFecha(String fechaIni,
			String fechaFin) throws Exception {
		
		em = emf.createEntityManager();
		List<ESolicitud> listar = null;
		String estado = "aprobado";
		
		try {
			
			Query query = em.createQuery("select s from ESolicitud s " +
					" where s.str_estado=:estado and s.str_fecha between :fechaIni and :fechaFin ");
			query.setParameter("estado", estado);
			query.setParameter("fechaIni", fechaIni);
			query.setParameter("fechaFin", fechaFin);
		
			listar = query.getResultList();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		
		return listar;
	}

}
